///*
// * 描          述:  <描述>
// * 修  改   人:  Administrator
// * 修改时间:  2020年2月24日
// * <修改描述:>
// */
//package com.tx.component.file.resource;
//
//import java.io.IOException;
//import java.io.InputStream;
//import java.util.List;
//
//import org.apache.commons.vfs2.FileSystemException;
//import org.springframework.beans.factory.InitializingBean;
//import org.springframework.transaction.support.TransactionSynchronization;
//import org.springframework.transaction.support.TransactionSynchronizationManager;
//
///**
// * 事务环绕文件资源代理<br/>
// * <功能详细描述>
// * 
// * @author  Administrator
// * @version  [版本号, 2020年2月24日]
// * @see  [相关类/方法]
// * @since  [产品/模块版本]
// */
//public class TransactionAwareFCResourceProxy
//        implements FCResource, InitializingBean {
//    
//    /** targetCacheManager */
//    private FCResource targetFileResource;
//    
//    /** <默认构造函数> */
//    public TransactionAwareFCResourceProxy() {
//        super();
//    }
//    
//    /** <默认构造函数> */
//    public TransactionAwareFCResourceProxy(FCResource targetFileResource) {
//        super();
//        this.targetFileResource = targetFileResource;
//        afterPropertiesSet();
//    }
//    
//    /**
//     * @param 对targetCacheManager进行赋值
//     */
//    public void setFileResource(FCResource targetFileResource) {
//        this.targetFileResource = targetFileResource;
//    }
//    
//    /**
//     * @throws Exception
//     */
//    @Override
//    public void afterPropertiesSet() {
//        if (this.targetFileResource == null) {
//            throw new IllegalArgumentException(
//                    "Property 'targetFileResource' is required.");
//        }
//    }
//    
//    /**
//     * @return
//     */
//    @Override
//    public String getRelativePath() {
//        return this.targetFileResource.getRelativePath();
//    }
//    
//    /**
//     * @return
//     */
//    @Override
//    public boolean exists() {
//        return this.targetFileResource.exists();
//    }
//    
//    /**
//     * @return
//     */
//    @Override
//    public boolean isFile() {
//        return this.targetFileResource.isFile();
//    }
//    
//    /**
//     * @return
//     */
//    @Override
//    public boolean isFolder() {
//        return this.targetFileResource.isFolder();
//    }
//    
//    /**
//     * @return
//     */
//    @Override
//    public List<FCResource> findFiles() {
//        return this.targetFileResource.findFiles();
//    }
//    
//    /**
//     * @param relativePath
//     * @return
//     */
//    @Override
//    public FCResource resolveRelative(String relativePath) {
//        return this.targetFileResource.resolveRelative(relativePath);
//    }
//    
//    /**
//     * @return
//     * @throws IOException
//     */
//    @Override
//    public InputStream getInputStream() throws IOException {
//        return this.targetFileResource.getInputStream();
//    }
//    
//    /**
//     * @param inputStream
//     */
//    @Override
//    public void add(InputStream inputStream) {
//        FCResource finalFR = this.targetFileResource;
//        if (TransactionSynchronizationManager.isSynchronizationActive()) {
//            TransactionSynchronizationManager
//                    .registerSynchronization(new TransactionSynchronization() {
//                        @Override
//                        public void beforeCommit(boolean readOnly) {
//                            finalFR.add(inputStream);
//                        }
//                    });
//        } else {
//            finalFR.add(inputStream);
//        }
//    }
//    
//    /**
//     * 
//     */
//    @Override
//    public void delete() {
//        FCResource finalFR = this.targetFileResource;
//        if (TransactionSynchronizationManager.isSynchronizationActive()) {
//            TransactionSynchronizationManager
//                    .registerSynchronization(new TransactionSynchronization() {
//                        @Override
//                        public void beforeCommit(boolean readOnly) {
//                            finalFR.delete();
//                        }
//                    });
//        } else {
//            finalFR.delete();
//        }
//    }
//    
//    /**
//     * @param inputStream
//     */
//    @Override
//    public void save(InputStream inputStream) {
//        FCResource finalFR = this.targetFileResource;
//        if (TransactionSynchronizationManager.isSynchronizationActive()) {
//            TransactionSynchronizationManager
//                    .registerSynchronization(new TransactionSynchronization() {
//                        @Override
//                        public void beforeCommit(boolean readOnly) {
//                            finalFR.save(inputStream);
//                        }
//                    });
//        } else {
//            finalFR.save(inputStream);
//        }
//    }
//    
//    /**
//     * 
//     */
//    @Override
//    public void createFile() {
//        FCResource finalFR = this.targetFileResource;
//        if (TransactionSynchronizationManager.isSynchronizationActive()) {
//            TransactionSynchronizationManager
//                    .registerSynchronization(new TransactionSynchronization() {
//                        @Override
//                        public void beforeCommit(boolean readOnly) {
//                            finalFR.createFile();
//                        }
//                    });
//        } else {
//            finalFR.createFile();
//        }
//    }
//    
//    /**
//     * 
//     */
//    @Override
//    public void createFolder() {
//        FCResource finalFR = this.targetFileResource;
//        if (TransactionSynchronizationManager.isSynchronizationActive()) {
//            TransactionSynchronizationManager
//                    .registerSynchronization(new TransactionSynchronization() {
//                        @Override
//                        public void beforeCommit(boolean readOnly) {
//                            finalFR.createFolder();
//                        }
//                    });
//        } else {
//            finalFR.createFolder();
//        }
//    }
//    
//    /**
//     * @param selector
//     * @return
//     */
//    @Override
//    public void delete(FCResourceFilter selector) {
//        FCResource finalFR = this.targetFileResource;
//        if (TransactionSynchronizationManager.isSynchronizationActive()) {
//            TransactionSynchronizationManager
//                    .registerSynchronization(new TransactionSynchronization() {
//                        @Override
//                        public void beforeCommit(boolean readOnly) {
//                            finalFR.delete(selector);
//                        }
//                    });
//        } else {
//            finalFR.delete(selector);
//        }
//    }
//    
//    /**
//     * @return
//     * @throws FileSystemException
//     */
//    @Override
//    public void deleteAll() {
//        FCResource finalFR = this.targetFileResource;
//        if (TransactionSynchronizationManager.isSynchronizationActive()) {
//            TransactionSynchronizationManager
//                    .registerSynchronization(new TransactionSynchronization() {
//                        @Override
//                        public void beforeCommit(boolean readOnly) {
//                            finalFR.deleteAll();
//                        }
//                    });
//        } else {
//            finalFR.deleteAll();
//        }
//    }
//    
//}
